android重写
① 如何重写android系统sn
自定义progressbar
现在要自定义一个等待的时候转动的小圈,相信大家也都嫌系统自带的很麻烦吧??
如果要自定义那些系统的组件都有一个法子,那就是看系统的是怎么写的。
看下系统的progressbar的方法:
首先看android的系统的style.xml的文件,系统的样式定义都在里面 android-sdk-windows\platforms\android-8\data\res\values 目录下打开style.xml,搜索ProgressBar。
可以看到系统是这样定义progressbar的:
<style name="Widget.ProgressBar">
<item name="android:indeterminateOnly">true</item>
<item name="android:indeterminateDrawable">@android:drawable/progress_medium_white</item>
<item name="android:indeterminateBehavior">repeat</item>
<item name="android:indeterminateDuration">3500</item>
<item name="android:minWidth">48dip</item>
<item name="android:maxWidth">48dip</item>
<item name="android:minHeight">48dip</item>
<item name="android:maxHeight">48dip</item>
</style>
接下来我们关注下 <item name="android:indeterminateDrawable">@android:drawable/progress_medium_white</item> 这一行。可以看到它使用了android:drawable/progress_medium_white这样的一个资源
找到这个文件并且打开,我们可以看到:
<?xml version="1.0" encoding="utf-8" ?>
- <!-- /*
**
** Copyright 2009, The Android Open Source Project
**
** Licensed under the Apache License, Version 2.0 (the "License");
** you may not use this file except in compliance with the License.
** You may obtain a of the License at
**
** http://www.apache.org/licenses/LICENSE-2.0
**
** Unless required by applicable law or agreed to in writing, software
** distributed under the License is distributed on an "AS IS" BASIS,
** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
** See the License for the specific language governing permissions and
** limitations under the License.
*/
-->
<animated-rotate
xmlns:android="http://schemas.android.com/apk/res/android"
android:drawable="@drawable/spinner_white_48" android:pivotX="50%"
android:pivotY="50%"
android:framesCount="12"
android:frameDuration="100" />
我把前面的注释去掉,大家再看:
<?xml version="1.0" encoding="utf-8" ?>
<animated-rotate
xmlns:android="http://schemas.android.com/apk/res/android"
android:drawable="@drawable/spinner_white_48"
android:pivotX="50%"
android:pivotY="50%"
android:framesCount="12"
android:frameDuration="100" />
就剩这么多了,然后分析下这个文件(总共没有几行代码了嘛)
xmlns:android="http://schemas.android.com/apk/res/android" 约束,不说了,也不需要我们关注
android:drawable="@drawable/spinner_white_48" 这个相信接触过android的都知道这是指定了一个图标吧
android:pivotX="50%"
android:pivotY="50%" 这两行代码是指定了一个点(point嘛)那是什么点呢,中心点,我们让那个圆圈围着这个点转动,就有了动画效果,所以它是指定的围绕哪个点转动(为了证明我的猜想,我在后来自定义的代码中将他们都改成了0,它们就围
② androidstudio怎么进行方法重写的快捷键
Android Studio常用快捷键 1. Ctrl+D: 集合了复制和粘贴两个操作,如果有选中的部分就复制选中的部分,并在选中部分的后面 粘贴出来,如果没有选中的部分,就复制光标所在的行,并在此行的下面粘贴出来。 2. Ctrl+空格: 输入代码时按此组合键会列出与之相匹配的类、方法名、成员变量等,起智能提示的作用。 在编辑XML文件一样有用。 3. Ctrl+向下箭头 或Ctrl+向上箭头:在有自动匹配下拉列表时,此快捷键会自动关掉下拉列表, 光标移动到下/上一行。 4. 自动匹配下拉列表的排列方式的切换:在自动匹配下拉列表的右下角有个“π”图标,点击后可选 是按:实用性、字母两种排列方式。 5. Ctrl+斜杠 、Ctrl+shift+斜杠: Ctrl+斜杠:注释或取消注释当前行或选中的代码块,以双斜杠的方式即“//” Ctrl+shift+斜杠:注释或取消注释选中的代码块,以“/*……*/”方式注释, 6. Ctrl+shift+Enter:自动匹配相对应的语法结构,比如if,do-while,try-catch等结构。 7. Ctrl+F:搜索 8. Ctrl+句点:在自动匹配下拉列表中,选中第一个item 9. 感叹号:在自动匹配下拉列表中,上下键选中一个返回结果为boolean的item,按感叹号会自动取反: 10. Ctrl+Enter :在自动匹配下拉列表中,在没有选中的item时,默认选中第一个item。 11. Ctrl+shift+A:快速查找android studio中的菜单。 12. Ctrl+N:快速查找类名、文件 13. Ctrl+B:直接跳转到类、方法、成员变量定义的地方。与Ctrl+鼠标左键效果一样 14. Ctrl+Alt+B:查询有哪些类实现了光标所在的接口。 15. Ctrl+Alt+shift+I:检测代码,比如检测一些定义了,但没有使用过的变量或方法。检测的目的是为了提高代码效率。 16.Ctrl+Alt+shift+N :快速打开输入的方法或变量。 17.Ctrl+shift+F7:以高亮的形式标志处一些相关的东西,这里主要由三种情况:1.光标的位置在implement时, 会把类实现了接口的方法名给标志出来;2.光标的位置在return时,会标志出方法的所有退出的地方; 3.光标在try或者throws关键字处时,会标志出会产生异常的语句。 18.shift+鼠标滚动:可实现编辑界面的横向滚动。 19.Ctrl+Alt+V:调用方法时传入的参数是比较复杂的表达式时,可用此组合键重构变量,以简化代码的复杂度。 在组合键之前要先选中表达式。 20. Ctrl+D:比较两个jar文件,在同一工程中,选中两个jar文件,按此组合键 21.Ctrl+O:子类想重写父类的方法时,按此组合键可显示所有父类的方法。接口对应的组合键时Ctrl+I。 22.Ctrl+shift+I:快速查看方法体,想查看一个方法是如何实现的,可把光标移至方法处,按此组合键。 23.Ctrl+Q:把光标移至方法处,按此组合键可快速查看方法的说明文档。 24.Ctrl+~:切换编辑界面的风格,快捷键设计 25.Alt+shift+C:查看工程的最近修改。 26.Ctrl+E:快速查看最近打开打开过的文件。 27.shift+F6:可对类、方法、变量进行重命名,使用的地方会自动更新名字。 28.Alt+F1:快速打开project view、structure view 等查看相应的元素。 29.Ctrl+Alt+F7:查看一个类、方法、成员变量在整个工程中的使用情况。 30.Ctrl+shift+空格:在赋值或者是在方法中要传入参数时,列出类型匹配的方法名、成员变量名。 31.Ctrl+Alt+T:选中一块代码,按此组合键,可快速添加if 、for、try/catch等语句。 32.Ctrl+Tab:打开界面切换窗口,保持按住Ctrl键,选中相应的要打开的窗口。 33.Ctrl+W:选中光标所在的所在的单词(一个成员变量或者是一个方法名),多按一次会选中所在的语句, 再多按一次会选中所在的代码块。。。依次类推,每增加一次会扩大一级选中的范围。
③ Android基础之java多态,继承,重载和重写的区别
(1)方法重载是让类以统一的方式处理不同类型数据的一种手段。多个同名函数同时存在,具有不同的参数个数/类型。重载Overloading是一个类中多态性的一种表现。
(2) Java的方法重载,就是在类中可以创建多个方法,它们具有相同的名字,但具
有不同的参数和不同的定义。调用方法时通过传递给它们的不同参数个数和参数类型
来决定具体使用哪个方法, 这就是多态性。
(3) 重载的时候,方法名要一样,但是参数类型和个数不一样,返回值类型可以相同也可以不相同。无法以返回型别作为重载函数的区分标准。
然后我们再来谈谈 重写(Overriding)
(1)父类与子类之间的多态性,对父类的函数进行重新定义。如果在子类中定义某
方法与其父类有相同的名称和参数,我们说该方法被重写 (Overriding)。在Java中,子类可继承父类中的方法,而不需要重新编写相同的方法。但有时子类并不想原封不动地继承父类的方法,而是想作一定的修改,这就需要采用方法的重写。方法重写又称方法覆盖。
(2)若子类中的方法与父类中的某一方法具有相同的方法名、返回类型和参数表,
则新方法将覆盖原有的方法。如需父类中原有的方法,可使用super关键字,该关键 字引用了当前类的父类。
(3)子类函数的访问修饰权限不能少于父类的;
④ androidstudio中mainactivity删掉了开头怎么重写
操作步骤如下:
1、首先在程序中点击右键点击androidstudio,然后在mainactivity中选择要加载的函数。
2、选择好以后点击ok,并可进入。
⑤ android中menu可能需要重写的方法是哪些
可能需要重写的如下:
public boolean onCreateOptionsMenu(Menu menu)方法只被系统调用一次,如需要动态更改菜单内容还需重写onPrepareOptionsMenu(Menu menu)方法实现
[java] view plain
Menu m=null;
int count=0;
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
if(count>0){
if(count%2==0){
menu.removeGroup(1);
}else{
menu.add(1, Menu.FIRST, 0, "5st");
menu.add(1, Menu.FIRST+1, 0, "6st");
}
}
count++;
return super.onPrepareOptionsMenu(menu);
}
2,context menu(长按屏幕产生)
[java] view plain
@Override
public boolean onContextItemSelected(MenuItem item) {
switch (item.getItemId()) {
case 1:
Toast.makeText(this, "you select"+item.getItemId(), 500).show();
break;
case 2:
Toast.makeText(this, "you select"+item.getItemId(), 500).show();
break;
}
return super.onContextItemSelected(item);
}
@Override
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo) {
menu.add(0, Menu.FIRST, 0, "1st");
menu.add(0, Menu.FIRST+1, 0, "2st");
super.onCreateContextMenu(menu, v, menuInfo);
}
⑥ android 自定义view要重写哪几个方法
很多的Android入门程序猿来说对于Android自定义View,可能都是比较恐惧的,但是这又是高手进阶的必经之路,所有准备在自定义View上面花一些功夫,多写一些文章。先总结下自定义View的步骤: 1、自定义View的属性 2、在View的构造方法中获得我们自定义的属性 [ 3、重写onMesure ] 4、重写onDraw 我把3用[]标出了,所以说3不一定是必须的,当然了大部分情况下还是需要重写的。 详见网址:blog/lmj623565791/article/details/24252901
⑦ android studio怎么快速的重写代码快捷键
提示
Ctrl+P方法参数提示
Ctrl+空格代码提示
Ctrl+Shift+Space在很多时候都能够给出Smart提示
Ctrl+Alt+Space类名或接口名提示
查看
Alt+1快速打开或隐藏工程面板
Ctrl+H查看类结构图
Ctrl+F12查看当前文件的结构
Ctrl+Q查看注释文档
Ctrl+P查看参数信息
Alt+Q查看当前方法的声明
Ctrl+Q查看JavaDoc
Ctrl+W选中单词继而语句继而行继而函数
查找
Alt + F1查找代码所在位置
Ctrl + F7查找当前元素在当前文件中的引用,然后按F3可以选择
Alt + F3快速查找
Ctrl + Shift + F7可以高亮当前元素在当前文件中的使用
Ctrl + Shift+N查找文件
Ctrl + Shift+Alt+N查找类中的方法或变量
Ctrl + B查找打开光标处的类或方法
Ctrl + N快速查找类
Ctrl + F查找文本
Alt+F1可以将正在编辑的元素在各个面板中定位
Ctrl+Shift+Alt+N可以快速打开符号 快速打开类/文件/符号时,可以使用通配符,也可以使用缩写
Ctrl+Alt+Up /Ctrl+Alt+Down可以快速跳转搜索结果
修复
Shift+F6重构-重命名
Ctrl+X删除行
Ctrl+D复制行
Ctrl+/ 或 Ctrl+Shift+/ 注释(// 或者/*...*/ )
Alt+Insert可以生成构造器/Getter/Setter等
Ctrl+Alt+L格式化代码
Ctrl+R替换文本
Alt+Enter导入包,自动修正
Ctrl+Alt+O优化导入的类和包
Ctrl+J自动代码
Ctrl+Shift+Space自动补全代码
Ctrl+Alt+Space类名自动完成
Ctrl+Shift+Insert可以选择剪贴板内容并插入
Ctrl+Shift+J可以整合两行
Ctrl+Alt+T可以把代码包在一块内,例如try/catch
Ctrl+Alt+V可以引入变量。例如把括号内的SQL赋成一个变量
Alt+F8计算变量值
Ctrl+O可以选择父类的方法进行重写
最近相关
Ctrl+E最近打开的文件 ----------
Ctrl+Shift+Backspace可以跳转到上次编辑的地方
Ctrl+Alt+ left/right返回至上次浏览的位置
Ctrl+E或者Alt+Shift+C 最近更改的代码
Alt+Shift+C对比最近修改的代码
移动
Ctrl+Shift+Up/Down代码向上/下移动。 ---------------
F2 或Shift+F2高亮错误或警告快速定位 ------------
Ctrl+Up/Down光标跳转到第一行或最后一行下
Ctrl+[或]可以跳到大括号的开头结尾
Ctrl+Shift+up/down移动方法
Ctrl+P方法参数提示
Ctrl+空格代码提示
Ctrl+Shift+Space在很多时候都能够给出Smart提示
Ctrl+Alt+Space类名或接口名提示
⑧ android 如何重写imageview 让图片有圆角效果
android 自定义圆角ImageView以及锯齿的处理
看到很多人开发过程中要使用圆角图片时,解决方法有:
1.重新绘制一张图片
2.通过布局来配置
3.通过重写View来实现
其中1,2在这里就不讲了,重点讲讲方法三的实现。
实现一:通过截取画布一个圆形区域与图片的相交部分进行绘制,缺点:锯齿明显,设置Paint,Canvas抗锯齿无效。
package com.open.circleimageview.widget;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.PaintFlagsDrawFilter;
import android.graphics.Path;
import android.graphics.Rect;
import android.graphics.Region;
import android.util.AttributeSet;
import android.view.View;
public class CircleImageViewA extends View {
public CircleImageViewA(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
public CircleImageViewA(Context context, AttributeSet attrs) {
super(context, attrs);
}
public CircleImageViewA(Context context) {
super(context);
}
private Bitmap bitmap;
private Rect bitmapRect=new Rect();
private PaintFlagsDrawFilter pdf=new PaintFlagsDrawFilter(0, Paint.ANTI_ALIAS_FLAG|Paint.FILTER_BITMAP_FLAG);
private Paint paint = new Paint();
{
paint.setStyle(Paint.Style.STROKE);
paint.setFlags(Paint.ANTI_ALIAS_FLAG);
paint.setAntiAlias(true);// 设置画笔的锯齿效果。 true是去除,大家一看效果就明白了
}
private Path mPath=new Path();
public void setImageBitmap(Bitmap bitmap)
{
this.bitmap=bitmap;
}
@Override
protected void onDraw(Canvas canvas) {
if(null==bitmap)
{
return;
}
bitmapRect.set(0, 0, getWidth(), getHeight());
canvas.save();
canvas.setDrawFilter(pdf);
mPath.reset();
canvas.clipPath(mPath); // makes the clip empty
mPath.addCircle(getWidth()/2, getWidth()/2, getHeight()/2, Path.Direction.CCW);
canvas.clipPath(mPath, Region.Op.REPLACE);
canvas.drawBitmap(bitmap, null, bitmapRect, paint);
canvas.restore();
}
}
实现二:通过PorterDuffXfermode 方式(注意要设置硬件加速,否则部分机子无效),优点:锯齿基本没有
package com.open.circleimageview.widget;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.PaintFlagsDrawFilter;
import android.graphics.PorterDuff;
import android.graphics.PorterDuffXfermode;
import android.graphics.Rect;
import android.graphics.RectF;
import android.util.AttributeSet;
import android.view.View;
public class CircleImageViewB extends View {
public CircleImageViewB(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
init();
}
public CircleImageViewB(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
public CircleImageViewB(Context context) {
super(context);
init();
}
private Bitmap bitmap;
private Rect bitmapRect=new Rect();
private PaintFlagsDrawFilter pdf=new PaintFlagsDrawFilter(0, Paint.ANTI_ALIAS_FLAG|Paint.FILTER_BITMAP_FLAG);
private Paint paint = new Paint();
{
paint.setStyle(Paint.Style.STROKE);
paint.setFlags(Paint.ANTI_ALIAS_FLAG);
paint.setAntiAlias(true);// 设置画笔的锯齿效果。 true是去除,大家一看效果就明白了
}
private Bitmap mDstB=null;
private PorterDuffXfermode xfermode=new PorterDuffXfermode(PorterDuff.Mode.MULTIPLY);
private void init()
{
try {
if(android.os.Build.VERSION.SDK_INT>=11)
{
setLayerType(LAYER_TYPE_SOFTWARE, null);
}
} catch (Exception e) {
e.printStackTrace();
}
}
public void setImageBitmap(Bitmap bitmap)
{
this.bitmap=bitmap;
}
private Bitmap makeDst(int w, int h)
{
Bitmap bm = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888);
Canvas c = new Canvas(bm);
Paint p = new Paint(Paint.ANTI_ALIAS_FLAG);
p.setColor(Color.parseColor("#ffffffff"));
c.drawOval(new RectF(0, 0, w, h), p);
return bm;
}
@Override
protected void onDraw(Canvas canvas) {
if(null==bitmap)
{
return;
}
if(null==mDstB)
{
mDstB=makeDst(getWidth(), getHeight());
}
bitmapRect.set(0, 0, getWidth(), getHeight());
canvas.save();
canvas.setDrawFilter(pdf);
canvas.drawBitmap(mDstB, 0, 0, paint);
paint.setXfermode(xfermode);
canvas.drawBitmap(bitmap, null, bitmapRect, paint);
paint.setXfermode(null);
canvas.restore();
}
}