亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > Android > 正文

android中圖形圖像處理之drawable用法分析

2020-04-11 11:23:00
字體:
來源:轉載
供稿:網友

本文實例講述了android中圖形圖像處理之drawable用法。分享給大家供大家參考。具體如下:

一、如何獲取 res 中的資源

數據包package:android.content.res

主要類:Resources

其主要接口按照功能,劃分為以下三部分:

getXXXX()

例如:

int getColor(int id)
Drawable getDrawable(int id)
String getString(int id)  直接獲取res中存放的資源
InputStream openRawResource(int id)  獲取資源的數據流,讀取資源數據
void parseBundleExtras(XmlResourceParser parser, Bundle outBundle)  從XML文件中獲取數據
Resource為每種資源提供了相應的接口來獲取這種資源,除了可以直接獲取資源外,還額外提供了以數據流的方式獲取資源,這在以后的應用程序開發中會經常使用,那么如何獲取Resources了,如下:Resources r = this.getContext().getResources();
 
二、如何獲取資源中的畫圖對象

數據包package:android.graphics.drawable

主要類:Drawable

Drawable是個virtual class,具體如何畫圖,需要具體分析Drawable的子類,例如:BitmapDrawable

其主要接口如下:

BitmapDrawable()
BitmapDrawable(Bitmap bitmap)
BitmapDrawable(String filepath)
BitmapDrawable(InputStream is)
void draw(Canvas canvas)
final Bitmap getBitmap()
final Paint getPaint()

Drawable是個抽象類,在BitmapDrawable中我們就看到位圖的具體操作,在仔細看下BitmapDrawable的構造函數,我們就會發現與Resource中的openRawResource()接口是相對應的,就可以通過以下方法來獲取位圖:

Resources r = this.getContext().getResources();Inputstream is = r.openRawResource(R.drawable.my_background_image);BitmapDrawable bmpDraw = new BitmapDrawable(is);Bitmap bmp = bmpDraw.getBitmap();

Paint

數據包package:android.graphics

Android SDK中的簡介:The Paint class holds the style and color information about how to draw geometries, text and bitmaps. 主要就是定義:畫刷的樣式,畫筆的大小/顏色等。

Typeface

數據包 package:android.graphics

Android SDK中的簡介:The Typeface class specifies the typeface and intrinsic style of a font. 主要就是定義:字體。

核心類顯示資源

數據包package:android.graphics

主要類:Canvas

Android SDK中的簡介:The Canvas class holds the “draw” calls. To draw something, you need 4 basic components: A Bitmap to hold the pixels, a Canvas to host the draw calls (writing into the bitmap), a drawing primitive (e.g. Rect, Path, text, Bitmap), and a paint (to describe the colors and styles for the drawing).

按照結構的功能,將主要接口分為以下3部分:

boolean clipXXXX() Region區域操作:DIFFERENCE INTERSECT REPLACE REVERSE_DIFFERENCE UNION XOR

void drawXXXX()畫圖函數

void rotate()  void scale()  void skew() void translate() 畫布操作函數
Region在這里需要特殊說明下:Region就是一個區域,也就是畫布(Canvas)中的有效區域,在無效區域上draw,對畫布沒有任何改變。

Drawable類

Drawable是一個通用的抽象類,它的目的是告訴你什么東西是可以畫的。你會發現基于Drawable類擴展出各種繪圖的類,見下面的表格,當然你可以繼承它來創建你自己的繪圖類.
 
有三種方法可以定義和實例化一個Drawable:保存一個圖片到你工程資源中,使用XML文件來描述Drawable屬性或者用一個正常的類去構造。下面我們將討論兩種技術(對一個有開發經驗的開發者來說構造并不是最新的技術)。

從資源圖像文件中創建

一個比較簡單的方法是添加一個圖片到你的程序中,然后通過資源文件引用這個文件,支持的文件類型有PNG(首選的) JPG(可接受的)GIF(不建議),顯然這種對于顯示應用程序的圖標跟來說是首選的方法,也可以用來顯示LOGO,其余的圖片可以用在例如游戲中。

把一個圖片資源,添加你的文件到你工程中res/drawable/目錄中去,從這里,你就可以引用它到你的代碼或你的XML布局中,也就是說,引用它也可以用資源編號,比如你選擇一個文件只要去掉后綴就可以了(例如:my_image.png 引用它是就是my_image)。

注意:SDK指出,為了縮小圖片的存儲空間,在Build的時候又可能對圖片進行壓縮,如果不想被壓縮,可以將圖片放在res/raw/目錄中。

SDK給出的例子:

LinearLayout mLinearLayout;protected void onCreate(Bundle savedInstanceState) {  super.onCreate(savedInstanceState);  // Create a LinearLayout in which to add the ImageView  mLinearLayout = new LinearLayout(this);  // Instantiate an ImageView and define its properties  ImageView i = new ImageView(this);  i.setImageResource(R.drawable.my_image);  i.setAdjustViewBounds(true); // set the ImageView bounds to match the Drawable's dimensions  i.setLayoutParams(new Gallery.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));  // Add the ImageView to the layout and set the layout as the content view  mLinearLayout.addView(i);  setContentView(mLinearLayout);}獲取Drawable對象:Resources res = mContext.getResources();Drawable myImage = res.getDrawable(R.drawable.my_image); 

注意:保持每個資源類型的一至,可以保證你項目狀態的一致性,就不用擔心有許多不同類型的對象來實例化它。例如:如果使用相同的圖像資源來實例化兩個Drawable對象。然后修改一個Drawables的屬性(例如alpha),然后不幸得是這個效果也會出現在另一個對象上去。所以當處理同一個資源的多個實例對象時,不是直接轉換為Drawable,而是應該執行tween animation

如何添加資源到ImageView:

<ImageView   android:layout_width="wrap_content" android:layout_height="wrap_content" android:tint="#55ff0000" android:src="@drawable/my_image"/>

從XML文件中創建

到如今,你應該比較熟悉按Android的原則去開發一個用戶接口,因此,你也應該理解了定義一個XML文件對于對象的作用與靈活的重要性。這個理念無數次用于Drawables.

如果你想創建一個Drawable對象,而這個對象并不依賴于變量或用戶的交換,把它定義到XML中去應該是一個不錯的方法。即使你期望在你的應用程序中改變其屬性來增加用戶體驗。你應該考慮把對象放入XML中,因為你可以隨時修改其屬性。

當你在你的XML中定義了一個Drawable,保存這個XML文件到你工程目錄下res/drawable目錄中,然后通過調用Resource.getDrawable()來檢索并實例化,傳遞給它XML文件中的資源ID號。任何Drawable的子類都支持inflate這個方法,這個方法會通過XML來實例化你的程序。任何Drawable都支持XML的擴展來利用特殊的XML屬性來幫助定義對象的屬性,可以查看任何Drawable子類文檔來看如何定義XML文件。

如下定義了一個TransitionDrawable:An extension of LayerDrawables that is intended to cross-fade between the first and second layer. It can be defined in an XML file with the <transition> element. Each Drawable in the transition is defined in a nested <item>. 有關TransitionDrawable的詳細信息查看http://androidappdocs.appspot.com/reference/android/graphics/drawable/TransitionDrawable.html。

將其定義在res/drawable/expand_collapse.xml:

<?xml version="1.0" encoding="utf-8"?><transition xmlns:android="http://schemas.android.com/apk/res/android"> <item android:drawable="@drawable/pic1"/>  <item android:drawable="@drawable/pic2"/></transition>

下面實例化并處理:

public class MainActivity extends Activity {  /** Called when the activity is first created. */  @Override  public void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentView(R.layout.main);    Resources res=getResources();    TransitionDrawable trans=(TransitionDrawable )res.getDrawable(R.drawable.expand_collapse);    ImageView image = (ImageView)findViewById(R.id.ImageView01);    image.setImageDrawable(trans);    trans.startTransition(3000);  }}ShapeDrawable

當你想去畫一些動態的二維圖片,一個ShapeDrawable對象可能會對你有很大的幫助。通過ShapeDrawable,你可以通過編程畫出任何你想到的圖像與樣式。

ShapeDrawable繼承了Drawable, 所以你可以調用Drawable里有的函數,比如視圖的背景,通過setBackgroundDrawable()設置。當然,你可以在自定義的視圖布局中畫你的圖形,因為ShapeDrawable有自己的draw()方法。你可以在View.OnDraw()方法期間創建一個視圖的子類去畫ShapeDrawable。

ShapeDrawable類(像很多其他Drawable類型在android.graphics.drawable包)允許你定義drawable公共方法的各種屬性。有些屬性你可以需要調整,包括透明度,顏色過濾,不透明度,顏色。
 
NinePatchDrawable

NinePatchDrawable 繪畫的是一個可以伸縮的位圖圖像,Android會自動調整大小來容納顯示的內容。一個例子就是NinePatch為背景,使用標準的Android按鈕,按鈕必須伸縮來容納長度變化的字符

NinePatchDrawable是一個標準的PNG圖像,它包括額外的1個像素的邊界,你必須保存它后綴為.9.png,并且保持到工程的res/drawable目錄中。

這個邊界是用來確定圖像的可伸縮和靜態區域。你可以在左邊和上邊的線上畫一個或多個黑色的1個像素指出可伸縮的部分(你可以需要很多可伸縮部分),它的相對位置在可伸縮部分相同,所以大的部分總是很大的。

你還有可以在圖像的右邊和下邊畫一條可選的drawable區域(有效的,內邊距線)。如果你的視圖對象設置NinePath為背景然后指定特殊的視圖字體,它將自行伸縮使所有的文本來適應根據右線與底部線設計好的區域(如果有的話),當然內邊距線不包括其中,Android可以使用左邊的線與上面的線來定義一個drawable區域。

我們來澄清一下這兩條不同的線,左邊跟頂部的線來定義哪些圖像的像素允許在伸縮時被復制。底部與右邊的線用來定義一個相對位置內的圖像,視圖的內容就放入其中。

希望本文所述對大家的Android程序設計有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲精品久久久久久久久久久久久| 久久精品国产69国产精品亚洲| 91精品综合久久久久久五月天| 日韩中文字幕第一页| 性欧美暴力猛交69hd| 懂色av中文一区二区三区天美| 81精品国产乱码久久久久久| 伊人久久大香线蕉av一区二区| 欧美性猛交xxxxx免费看| 亚洲新声在线观看| 欧美午夜丰满在线18影院| 欧美性猛交视频| 91午夜理伦私人影院| 欧美日韩国产黄| 日韩国产欧美精品一区二区三区| 91久久久国产精品| 亚洲激情成人网| 国产成人欧美在线观看| 久久综合亚洲社区| 欧美午夜片在线免费观看| 黑人巨大精品欧美一区二区| 影音先锋欧美精品| 亚洲欧美一区二区精品久久久| 精品动漫一区二区三区| 亚洲天堂精品在线| 成人在线中文字幕| 97精品伊人久久久大香线蕉| 国产精品爱久久久久久久| 久久这里只有精品视频首页| 韩剧1988在线观看免费完整版| 国产婷婷成人久久av免费高清| 国产欧美日韩高清| 国产91精品最新在线播放| 午夜精品蜜臀一区二区三区免费| 国产成人精品在线播放| 亚洲精品国产欧美| 免费97视频在线精品国自产拍| 亚洲jizzjizz日本少妇| 国产精品亚洲第一区| 欧美大全免费观看电视剧大泉洋| 国模gogo一区二区大胆私拍| 欧美日韩亚洲精品一区二区三区| 人人澡人人澡人人看欧美| 91精品久久久久久久久青青| 大伊人狠狠躁夜夜躁av一区| 91精品国产乱码久久久久久久久| 欧美日韩性视频| 日韩欧美国产网站| 国产精品久久久久久久久久尿| 欧美成人免费播放| 久久精品视频中文字幕| 在线视频日本亚洲性| 国产精品欧美日韩久久| 日本精品一区二区三区在线播放视频| 亚洲综合中文字幕68页| 黑丝美女久久久| 日韩成人中文电影| 亚洲娇小xxxx欧美娇小| 国产精品盗摄久久久| 亚洲国产精品电影在线观看| 日韩av网站大全| 中文字幕日韩欧美| 日本不卡视频在线播放| 成人av在线天堂| 九九九久久国产免费| 久久精品中文字幕一区| 91爱视频在线| 国产在线观看91精品一区| 日本久久久久久久久久久| 欧美激情精品久久久久久变态| 国产精品高清在线观看| 91av在线影院| 亚洲精品一区中文| 久久精品成人动漫| 欧美成人h版在线观看| 亚洲丝袜av一区| 国产精品日韩一区| 国产精品免费一区二区三区都可以| 国产日韩欧美在线视频观看| 国产深夜精品福利| 欧美日本中文字幕| 91av在线免费观看视频| 欧美性20hd另类| 成人亲热视频网站| 95av在线视频| 久久人91精品久久久久久不卡| 久久精彩免费视频| 日韩免费电影在线观看| 992tv成人免费影院| 欧美丰满少妇xxxxx| 美日韩精品免费观看视频| 色综合男人天堂| 欧美成人免费小视频| 最好看的2019的中文字幕视频| 亚洲国产91精品在线观看| www.亚洲天堂| 日韩精品有码在线观看| 亚洲自拍偷拍第一页| 欧美夜福利tv在线| 亚洲欧美日韩天堂一区二区| 欧美激情亚洲精品| 91久久综合亚洲鲁鲁五月天| 欧美性xxxxxx| 亚洲大胆人体av| 日本精品一区二区三区在线| 国产精品久久久久久久久免费| 欧美专区福利在线| 国产精品福利久久久| 另类图片亚洲另类| 日韩精品免费电影| 久久久久久12| 性色av一区二区三区| 日韩va亚洲va欧洲va国产| 777国产偷窥盗摄精品视频| 国产精品吴梦梦| 国产视频福利一区| 性色av一区二区三区红粉影视| 久久精品精品电影网| 日韩av在线影院| 久久精品久久久久| 欧美日韩国产精品专区| 国产精品视频区1| 4438全国亚洲精品在线观看视频| 波霸ol色综合久久| 国产一区二区三区18| 亚洲中国色老太| 国产精品你懂得| 久久影院资源站| 九九热r在线视频精品| 7777免费精品视频| 日韩国产高清污视频在线观看| 亚洲国产精品成人一区二区| 国产一区二区丝袜| 在线播放日韩欧美| 中文字幕在线精品| 国产亚洲精品综合一区91| 成人做爰www免费看视频网站| 国产精品电影在线观看| 91免费在线视频网站| 欧美日韩亚洲激情| 国产丝袜精品视频| 欧美成人精品激情在线观看| 色香阁99久久精品久久久| 91精品91久久久久久| 久久99亚洲热视| 久久亚洲成人精品| 国产亚洲一区二区精品| 日韩精品一区二区三区第95| 国产不卡av在线| 777午夜精品福利在线观看| 美日韩丰满少妇在线观看| 国产精品福利在线观看| 久久av资源网站| 国产伊人精品在线| 中文字幕日韩欧美在线| 国产成人欧美在线观看| 日韩在线观看免费全集电视剧网站| 欧美剧在线观看| 国产精品欧美激情| 精品久久久久久久中文字幕| 国产999在线| 成人黄色免费在线观看| 亚洲精品福利免费在线观看| 欧美肥老妇视频|