當前位置:首頁 » 安卓系統 » android圖片效果代碼

android圖片效果代碼

發布時間: 2023-06-28 01:00:17

『壹』 安卓代碼中,我有五張圖片,設置一個button,如何點擊一次button就切換下一張圖片

第一種:使用動畫的方法實現:(代碼繁瑣)
這種發放需要:兩個動畫效果,一個布局,一個主類來實現,不多說了,來看代碼吧:
public class IamgeTrActivity extends Activity {
/** Called when the activity is first created. */

public ImageView imageView;
public ImageView imageView2;

public Animation animation1;
public Animation animation2;

public TextView text;

public boolean juage = true;

public int images[] = new int[] { R.drawable.icon, R.drawable.expriment,
R.drawable.changer, R.drawable.dataline, R.drawable.preffitication };

public int count = 0;

public Handler handler = new Handler();

public Runnable runnable = new Runnable() {

@Override
public void run() {
// TODO Auto-generated method stub
AnimationSet animationSet1 = new AnimationSet(true);
AnimationSet animationSet2 = new AnimationSet(true);
imageView2.setVisibility(0);
TranslateAnimation ta = new TranslateAnimation(
Animation.RELATIVE_TO_SELF, 0f, Animation.RELATIVE_TO_SELF,
-1f, Animation.RELATIVE_TO_SELF, 0f,
Animation.RELATIVE_TO_SELF, 0f);
ta.setDuration(2000);
animationSet1.addAnimation(ta);
animationSet1.setFillAfter(true);
ta = new TranslateAnimation(Animation.RELATIVE_TO_SELF, 1.0f,
Animation.RELATIVE_TO_SELF, 0f, Animation.RELATIVE_TO_SELF,
0f, Animation.RELATIVE_TO_SELF, 0f);
ta.setDuration(2000);
animationSet2.addAnimation(ta);
animationSet2.setFillAfter(true);
//iamgeView 出去 imageView2 進來
imageView.startAnimation(animationSet1);
imageView2.startAnimation(animationSet2);
imageView.setBackgroundResource(images[count % 5]);
count++;
imageView2.setBackgroundResource(images[count % 5]);

text.setText(String.valueOf(count));
if (juage)
handler.postDelayed(runnable, 6000);
Log.i(handler, handler);
}
};

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
imageView = (ImageView) findViewById(R.id.imageView);
imageView2 = (ImageView) findViewById(R.id.imageView2);
text=(TextView)findViewById(R.id.text);
text.setText(String.valueOf(count));
//將iamgeView先隱藏,然後顯示
imageView2.setVisibility(4);
handler.postDelayed(runnable, 2000);
}

public void onPause() {
juage = false;
super.onPause();
}
}

布局代碼:

android:orientation=vertical
android:layout_width=fill_parent
android:layout_height=fill_parent
android:id=@+id/rl>

android:id=@+id/imageView
android:layout_width=fill_parent
android:background=@drawable/icon
android:layout_below=@+id/rl
android:layout_height=120dp />

android:id=@+id/imageView2
android:layout_width=fill_parent
android:background=@drawable/expriment
android:layout_below=@+id/rl
android:layout_height=120dp />

android:id=@+id/text
android:layout_width=fill_parent
android:layout_height=wrap_content
android:layout_below=@id/imageView/>

第二種:使用ViewFlipper實現圖片的輪播

Android系統自帶的一個多頁面管理控制項,它可以實現子界面的自動切換:
首先 需要為ViewFlipper加入View
(1) 靜態導入:在layout布局文件中直接導入
(2) 動態導入:addView()方法
ViewPlipper常用方法:
setInAnimation:設置View進入屏幕時候使用的動畫
setOutAnimation:設置View退出屏幕時候使用的動畫
showNext:調用該函數來顯示ViewFlipper裡面的下一個View
showPrevious:調用該函數來顯示ViewFlipper裡面的上一個View
setFlipInterval:設置View之間切換的時間間隔
startFlipping使用上面設置的時間間隔來開始切換所有的View,切換會循環進行
stopFlipping:停止View切換
講了這么多,那麼我們今天要實現的是什麼呢?
(1) 利用ViewFlipper實現圖片的輪播
(2) 支持手勢滑動的ViewFlipper
我們需要先准備幾張圖片:把圖片放進drawable中
創建兩個動畫:在res下面新建一個folder裡面新建兩個xml:
left_in:

android:ration=5000
android:fromXDelta=100%p
android:toXDelta=0/>

left_out:

android:fromXDelta=0
android:toXDelta=-100%p
android:ration=5000/>

一個布局文件:
xmlns:tools=http://schemas.android.com/tools
android:layout_width=match_parent
android:layout_height=match_parent
tools:context=.MainActivity >

android:id=@+id/flipper
android:layout_width=fill_parent
android:layout_height=fill_parent/>

一個主類:
public class MainActivity extends Activity {

private ViewFlipper flipper;
private int[] resId = {R.drawable.pc1,R.drawable.pc2,R.drawable.pc3,R.drawable.pc4};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

flipper = (ViewFlipper) findViewById(R.id.flipper);

/*
* 動態導入的方式為ViewFlipper加入子View
* */
for (int i = 0; i < resId.length; i++) {
flipper.addView(getImageView(resId[i]));

}
/*
* 為ViewFlipper去添加動畫效果
* */
flipper.setInAnimation(this, R.anim.left_in);
flipper.setOutAnimation(this, R.anim.left_out);
flipper.setFlipInterval(5000);
flipper.startFlipping();
}
private ImageView getImageView(int resId){
ImageView image = new ImageView(this);
image.setBackgroundResource(resId);
return image;
}

}
那麼這樣就實現了一個圖片輪詢的功能效果了
我們還可以添加點擊,滑動效果:
我們還需要添加兩個向右的滑動效果:
right_in:

android:fromXDelta=0
android:toXDelta=-100%p
android:ration=2000/>

right_out:

android:fromXDelta=100%p
android:toXDelta=0
android:ration=2000/>

然後我們還需要在主類裡面添加(如果你不想讓圖片自動播放,只想通過手勢來實現圖片播放那麼你需要把「為ViewFlipper添加動畫效果的代碼」刪掉):
public boolean onTouchEvent(MotionEvent event) {
// TODO Auto-generated method stub
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
startX = event.getX();
break;
case MotionEvent.ACTION_MOVE://判斷向左滑動還是向右滑動
if (event.getX() - startX > 100) {
flipper.setInAnimation(this, R.anim.left_in);
flipper.setOutAnimation(this, R.anim.left_out);
flipper.showPrevious();
}else if (startX - event.getX() > 100) {
flipper.setInAnimation(this, R.anim.right_in);
flipper.setOutAnimation(this, R.anim.right_out);
flipper.showNext();
}

case MotionEvent.ACTION_UP:
break;

}
return super.onTouchEvent(event);
}
這樣我們利用我們的ViewFlipper完成的圖片輪詢的功能就做完了。
午夜神器APP私密即時語音互動聊天,匿名兩性情趣秘密分享

『貳』 android 圖片播放 代碼

直接用動畫播放圖片 再在github上面下載一個photoView 來顯示圖片 就行了

『叄』 求:android 獲取系統相冊圖片並顯示在當前頁面的代碼

先初始化;

注意自定義 的

private final String IMAGE_TYPE = "image/*";private final int IMAGE_CODE = 0;


private void setImage() {
Intent getAlbum = new Intent(Intent.ACTION_GET_CONTENT); getAlbum.setType(IMAGE_TYPE); startActivityForResult(getAlbum, IMAGE_CODE);}
這里使用Intent獲得相冊圖片數據,並返回原來界面;

這里說明一下

startActivityForResult(getAlbum, IMAGE_CODE);

補充{

startActivityForResult與startActivity的不同之處在於:
1、startActivity( )
僅僅是跳轉到目標頁面,若是想跳回當前頁面,則必須再使用一次startActivity( )。
2、startActivityForResult( )
可以一次性完成這項任務,當程序執行到這段代碼的時候,假若從T1Activity跳轉到下一個Text2Activity,而當這個Text2Activity調用了finish()方法以後,程序會自動跳轉回T1Activity,並調用前一個T1Activity中的onActivityResult( )方法。

}

startActivityForResult(getAlbum, IMAGE_CODE);

這里採用startActivityForResult來做跳轉,此處的IMAGE_CODE實質是0為一個依據,可以寫其他的值,但一定要>=0

然後重寫onActivityResult用於接收剛剛得到的數據

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
Bitmap bm = null; ContentResolver resolver = getContentResolver(); if (requestCode == IMAGE_CODE) { try {
Uri originalUri = data.getData(); bm = MediaStore.Images.Media.getBitmap(resolver, originalUri); imgShow.setImageBitmap(bm); } catch (IOException e) {
e.printStackTrace(); }
}

補充{
ContentProvider-----數據提供給第三方應用程序使用時使用
因為在Android系統裡面,資料庫是私有的。一般情況下外部應用程序是沒有許可權讀取其他應用程序的數據。如果你想公開你自己的數據,你有兩個選擇:你可以創建你自己的內容提供器(一個ContentProvider子類)或者你可以給已有的提供器添加數據-如果存在一個控制同樣類型數據的內容提供器且你擁有寫的許可權
}
這里是創建一個新的內容提供器,然後在Activity當中通過getContentResolver()可以得到當前應用的 ContentResolver實例

if (requestCode == IMAGE_CODE) {
resultCode為回傳的標記這句話是在確認是否回傳的是你所需要的;如果是就執行try;不然就執行catch (IOException e) {
e.printStackTrace();}先說這里當try語句中出現異常是時,會執行catch中的語句,IOException e也就是實例化Exception類型的對象。e是此對象引用名稱。然後e(引用)會自動調用Exception類中指定的方法,也就出現了e.printStackTrace() ;。printStackTrace()方法的意思是:在命令行列印異常信息在程序中出錯的位置及原因。
try {
Uri originalUri = data.getData(); bm = MediaStore.Images.Media.getBitmap(resolver, originalUri); imgShow.setImageBitmap(bm);接收數據處理數據並顯示照片。
然後進行測試。


另附源碼
MainActivity:
package com.example.administrator.myapplication1;import android.graphics.BitmapFactory;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import java.io.IOException;import android.net.Uri;import android.os.Bundle;import android.provider.MediaStore;import android.app.Activity;import android.content.ContentResolver;import android.content.Intent;import android.graphics.Bitmap;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.ImageView;public class MainActivity extends AppCompatActivity { private final String IMAGE_TYPE = "image/*"; private final int IMAGE_CODE = 0; private Button choose=null; private ImageView imgShow; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); init();} private void init() { choose=(Button) findViewById(R.id.button1); imgShow=(ImageView) findViewById(R.id.imgShow); choose.setOnClickListener(listener); } private OnClickListener listener=new OnClickListener(){ @Override public void onClick(View v) {
setImage(); }

}; private void setImage() {
Intent getAlbum = new Intent(Intent.ACTION_GET_CONTENT); getAlbum.setType(IMAGE_TYPE); startActivityForResult(getAlbum, IMAGE_CODE); } protected void onActivityResult(int requestCode, int resultCode, Intent data) {
Bitmap bm = null; ContentResolver resolver = getContentResolver(); if (requestCode == IMAGE_CODE) { try {
Uri originalUri = data.getData(); bm = MediaStore.Images.Media.getBitmap(resolver, originalUri); imgShow.setImageBitmap(bm); } catch (IOException e) {
e.printStackTrace(); }
}
}
}


layout:activity_main.xml:

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <Button android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="選擇照相" android:layout_marginRight="190dp" android:layout_marginTop="8dp" android:paddingBottom="2dp" android:background="#aabbcc" /> <ImageView android:id="@+id/imgShow" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_margin="15dip" /></LinearLayout>

『肆』 android 不用XML,怎樣在代碼里用animation同時實現圖片的縮放和移動。

1.在Java Code定義動畫

AlphaAnimation

漸變透明度動畫效果

ScaleAnimation

漸變尺寸伸縮動畫效果

TranslateAnimation

畫面轉換位置移動動畫效果

RotateAnimation

畫面轉移旋轉動畫效果

//定義變數

private Animation myAnimation_Alpha;

private Animation myAnimation_Scale;

private Animation myAnimation_Translate;

private Animation myAnimation_Rotate;

myAnimation_Alpha=new AlphaAnimation(0.1f, 1.0f);

//第一個參數fromAlpha為 動畫開始時候透明度

//第二個參數toAlpha為 動畫結束時候透明度

myAnimation_Scale =new ScaleAnimation(0.0f, 1.4f, 0.0f, 1.4f, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);

//第一個參數fromX為動畫起始時 X坐標上的伸縮尺寸

//第二個參數toX為動畫結束時 X坐標上的伸縮尺寸

//第三個參數fromY為動畫起始時Y坐標上的伸縮尺寸

//第四個參數toY為動畫結束時Y坐標上的伸縮尺寸

//第五個參數pivotXType為動畫在X軸相對於物件位置類型

//第六個參數pivotXValue為動畫相對於物件的X坐標的開始位置

//第七個參數pivotXType為動畫在Y軸相對於物件位置類型

//第八個參數pivotYValue為動畫相對於物件的Y坐標的開始位置

myAnimation_Translate=new TranslateAnimation(30.0f, -80.0f, 30.0f, 300.0f);

//第一個參數fromXDelta為動畫起始時 X坐標上的移動位置

//第二個參數toXDelta為動畫結束時 X坐標上的移動位置

//第三個參數fromYDelta為動畫起始時Y坐標上的移動位置

//第四個參數toYDelta為動畫結束時Y坐標上的移動位置

myAnimation_Rotate=new RotateAnimation(0.0f,350.0f,Animation.RELATIVE_TO_SELF,0.5f, Animation.RELATIV E_TO_SELF, 0.5f);

//第一個參數fromDegrees為動畫起始時的旋轉角度

//第二個參數toDegrees為動畫旋轉到的角度

//第三個參數pivotXType為動畫在X軸相對於物件位置類型

//第四個參數pivotXValue為動畫相對於物件的X坐標的開始位

//第五個參數pivotXType為動畫在Y軸相對於物件位置類型

//第六個參數pivotYValue為動畫相對於物件的Y坐標的開始位置

2.3自定義動畫

除了以上4類動畫外,在代碼中繼承android.view.animation.Animation類來實現自定義效果。通過重寫Animation的applyTransformation(float interpolatedTime, Transformation t)函數來實現自定義動畫效果。

在繪制動畫的過程中會反復的調用applyTransformation函數,每次調用參數interpolatedTime值都會變化,該參數從0漸 變為1,當該參數為1時表明動畫結束。通過參數Transformation 來獲取變換的矩陣(matrix),通過改變矩陣就可以實現各種復雜的效果。

自定義圖片旋轉效果動畫代碼。

class ViewAnimation extends Animation

{

int mCenterX;

int mCenterY;

Camera camera = new Camera();

public ViewAnimation()

{

}

@Override

public void initialize(int width, int height, int parentWidth,

int parentHeight)

{

super.initialize(width, height, parentWidth, parentHeight);

mCenterX = width/2;

mCenterY = height/2;

setDuration(2500);

setFillAfter(true);

// setRepeatCount(100);

setInterpolator(new LinearInterpolator());

}

@Override

protected void applyTransformation(float interpolatedTime,

Transformation t)

{

final Matrix matrix = t.getMatrix();

camera.save();

camera.translate(0.0f, 0.0f, (1300 - 1300.0f * interpolatedTime));

camera.rotateY(360 * interpolatedTime);

camera.getMatrix(matrix);

matrix.preTranslate(-mCenterX, -mCenterY);

matrix.postTranslate(mCenterX, mCenterY);

camera.restore();

}

}

camera.translate(0.0f, 0.0f, (1300 - 1300.0f * interpolatedTime))在第一次調用的時候interpolatedTime值為0,相當於把ImageView在Z軸後移1300像素, 然後逐步的往前移動到0,同時camera.rotateY(360 * interpolatedTime)函數又把ImageView沿Y軸翻轉360度

2.4動畫實現

在代碼的一個activity中,將需要動畫的控制項與已定義的動畫關聯,開啟動畫

private Animation mAnimationXXX = null;//生明動畫

ImageView mAnimImageX = null;//生明 ImageView控制項(或者其它需要有動畫的控制項)

mAnimImageX = (ImageView) this.findViewById(R.id.anim_imageX);//取得圖片資源

mAnimImageX.startAnimation(mAnimationXXX);//基於xml文件,開啟動畫

mAnimImageX.startAnimation(new ViewAnimation());//基於自定義控制項,開啟動畫。

2.5圖片旋轉Demo

public class AnimationDemo extends Activity {

/** Called when the activity is first created. */

ImageView mAnimImage;

private Animation mAnimationAlpha = null;

private Animation mAnimationScale = null;

private Animation mAnimationTranslate = null;

private Animation mAnimationRotate = null;

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

mAnimImage = (ImageView) this.findViewById(R.id.anim_image1);

mAnimationAlpha = AnimationUtils.loadAnimation(this,R.anim.alpha_animation);

mAnimationScale = AnimationUtils.loadAnimation(this,R.anim.scale_animation);

mAnimationTranslate = AnimationUtils.loadAnimation(this,R.anim.translate_animation);

mAnimationRotate = AnimationUtils.loadAnimation(this,R.anim.rotate_animation);

}

public boolean onKeyUp(int keyCode, KeyEvent event)

{

switch ( keyCode )

{

case KeyEvent.KEYCODE_1:

mAnimImage.startAnimation(mAnimationAlpha);

break;

case KeyEvent.KEYCODE_2:

mAnimImage.startAnimation(mAnimationScale);

break;

case KeyEvent.KEYCODE_3:

mAnimImage.startAnimation(mAnimationTranslate);

break;

case KeyEvent.KEYCODE_4:

mAnimImage.startAnimation( mAnimationRotate);

break;

case KeyEvent.KEYCODE_5:

mAnimImage.startAnimation(new ViewAnimation());

break;

}

return true;

}

public boolean onKeyDown(int keyCode, KeyEvent event)

{

if ( keyCode == KeyEvent.KEYCODE_BACK)

{

this.finish();

return true;

}

return super.onKeyDown(keyCode, event);

}

}

3 Frame動畫

Frame 動畫是順序播放事先做好的圖片。可以在XML Resource定義,也可以使AnimationDrawable中的API定義。

3.1Frame動畫實現

定義XML文件

<?xml version="1.0" encoding="utf-8"?>

<animation-list xmlns:android="http://schemas.android.com/apk/res/android"

android:oneshot="false">

<item android:drawable="@drawable/a1" android:ration="500" />

<item android:drawable="@drawable/a2" android:ration="500" />

<item android:drawable="@drawable/a3" android:ration="500" />

<item android:drawable="@drawable/a4" android:ration="500" />

<item android:drawable="@drawable/a5" android:ration="500" />

<item android:drawable="@drawable/a6" android:ration="500" />

<item android:drawable="@drawable/a7" android:ration="500" />

<item android:drawable="@drawable/a8" android:ration="500" />

<item android:drawable="@drawable/a9" android:ration="500" />

<item android:drawable="@drawable/a10" android:ration="500" />

<item android:drawable="@drawable/a11" android:ration="500" />

<item android:drawable="@drawable/a12" android:ration="500" />

<item android:drawable="@drawable/a13" android:ration="500" />

<item android:drawable="@drawable/a14" android:ration="500" />

<item android:drawable="@drawable/a15" android:ration="500" />

</animation-list>

定義動畫類

public class GameView extends View

{

private AnimationDrawable frameAnimation = null;

Context mContext = null;

public GameView(Context context)

{

super(context);

mContext = context;

ImageView img = new ImageView(mContext);

img.setBackgroundResource(R.anim.frameanimation);

frameAnimation = (AnimationDrawable) img.getBackground();

frameAnimation.setOneShot( false );

this.setBackgroundDrawable(frameAnimation);

}

public void onDraw(Canvas canvas)

{

super.onDraw(canvas);

}

public boolean onKeyUp(int keyCode, KeyEvent event)

{

switch ( keyCode )

{

case KeyEvent.KEYCODE_DPAD_UP:

frameAnimation.start();

break;

}

return true;

}

}

開啟動畫

public class Activity01 extends Activity

{

private GameView mGameView;

/** Called when the activity is first created. */

@Override

public void onCreate(Bundle savedInstanceState)

{

super.onCreate(savedInstanceState);

mGameView = new GameView(this);

setContentView(mGameView);

}

public boolean onKeyUp(int keyCode, KeyEvent event)

{

if ( mGameView == null )

{

return false;

}

mGameView.onKeyUp(keyCode,event);

return true;

}

public boolean onKeyDown(int keyCode, KeyEvent event)

{

if ( mGameView == null )

{

return false;

}

if ( keyCode == KeyEvent.KEYCODE_BACK)

{

this.finish();

return true;

}

return super.onKeyDown(keyCode, event);

}

}

『伍』 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();

}

}


『陸』 在android,怎麼實現activity模糊圖層效果呢

Android裡面:
最普遍的模糊技術是這樣做的:從TextView的後一層背景中截取一部分;進行模糊處理;把模糊處理後的部分設置為TextView的背景。
實現activity模糊圖層效果是RenderScript是Android在API 11之後加入的,用於高效的圖片處理,包括模糊、混合、矩陣卷積計算等,通過一種fastblur模糊圖片演算法來計算一張圖片像素,進而更改圖片的解析度和模糊程度。演算法代碼可以參考這篇csdn博客介紹幾種模糊演算法,地址如下:http://blog.csdn.net/xu_fu/article/details/23131241。

幾種演算法實現的效果都差不多,但是效果和時間上還是有很大區別,這取決於你的Android實際的運行環境,如果機器是Android API 2.0以下的,就不能使用RenderScript類,只能使用硬編碼方式,這就涉及到OPENGL的知識了,OPENGL就是對圖像進行各種處理的一門知識,這些知識都可以到網上找得到。我在csdn上次了一個Android圖片模糊處理的一個小demo,歡迎下載:鏈接如下:http://download.csdn.net/detail/omayyouhappy/8888251

熱點內容
在什麼地方查qq密碼 發布:2025-02-07 04:01:51 瀏覽:11
買二手筆記本電腦看哪些配置 發布:2025-02-07 04:01:48 瀏覽:308
我的世界裡面什麼伺服器是建造的 發布:2025-02-07 03:51:48 瀏覽:189
不能連接到資料庫 發布:2025-02-07 03:47:00 瀏覽:45
安卓手機如何設置翻屏動畫 發布:2025-02-07 03:46:18 瀏覽:594
利基型存儲器什麼意思 發布:2025-02-07 03:43:58 瀏覽:556
安卓讀寫許可權在哪裡 發布:2025-02-07 03:29:21 瀏覽:36
釘郵怎麼找回密碼 發布:2025-02-07 03:16:40 瀏覽:81
比特幣錢包源碼 發布:2025-02-07 03:16:39 瀏覽:101
飢荒如何轉移伺服器 發布:2025-02-07 03:14:42 瀏覽:4