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();
}
}