實現探照燈效果
activity_main.xml
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/frameLayout1"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.xwy.TanZhaoDeng.MainActivity"
tools:ignore="MergeRootFrame" />
MainActivity.java
package com.xwy.TanZhaoDeng;
import android.support.v4.app.Fragment;
import android.app.Activity;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.BitmapShader;
import android.graphics.Canvas;
import android.graphics.Matrix;
import android.graphics.Paint;
import android.graphics.Shader.TileMode;
import android.graphics.drawable.ShapeDrawable;
import android.graphics.drawable.shapes.OvalShape;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.widget.FrameLayout;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
FrameLayout l1 = (FrameLayout) findViewById(R.id.frameLayout1);
l1.addView(new MyView(this));// 將自定義檢視新增到幀佈局管理器中
}
public class MyView extends View{
private Bitmap bitmap;// 源影象,也就是背景影象
private ShapeDrawable drawable;
private final int RADIUS = 100;// 探照燈的半徑
private Matrix matrix = new Matrix();
public MyView(Context context){
super(context);
Bitmap bitmap_source = BitmapFactory.decodeResource(getResources(), R.drawable.source);//獲取要顯示的源影象
bitmap = bitmap_source;
BitmapShader shader = new BitmapShader(Bitmap.createScaledBitmap(
bitmap_source, bitmap_source.getWidth(),
bitmap_source.getHeight(), true), TileMode.CLAMP,
TileMode.CLAMP);//建立BitmapShader物件
//圓形的drawable
drawable = new ShapeDrawable(new OvalShape());
drawable.getPaint().setShader(shader);
drawable.setBounds(0,0,RADIUS*2,RADIUS*2);// 設定圓的外切矩形
}
protected void onDraw(Canvas canvas){
super.onDraw(canvas);
Paint p = new Paint();
p.setAlpha(50);
canvas.drawBitmap(bitmap, 0, 0,p);// 繪製背景影象
drawable.draw(canvas);// 繪製探照燈照射的影象
}
public boolean onTouchEvent(MotionEvent event){
final int x = (int) event.getX();// 獲取當前觸控點的X軸座標
final int y = (int) event.getY(); // 獲取當前觸控點的Y軸座標
matrix.setTranslate(RADIUS - x, RADIUS - y);// 平移到繪製shader的起始位置
drawable.getPaint().getShader().setLocalMatrix(matrix);
drawable.setBounds(x-RADIUS,y-RADIUS,x+RADIUS,y+RADIUS);// 設定圓的外切矩形
invalidate(); // 重繪畫布
return true;
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
/**
* A placeholder fragment containing a simple view.
*/
public static class PlaceholderFragment extends Fragment {
public PlaceholderFragment() {
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_main, container,
false);
return rootView;
}
}
}
相關文章
- mask-image實現聚光燈效果
- androidTextView實現簡單的跑馬燈效果AndroidTextView
- JavaFx 實現水平滾動文字(跑馬燈效果)Java
- 用程式碼簡單的實現跑馬燈效果
- 滑鼠懸浮文字實現霓虹燈效果程式碼例項
- 流水燈實現
- Vue實現跑馬燈效果以及封裝為元件釋出Vue封裝元件
- asp.net+js方式實現的幻燈圖片效果展示ASP.NETJS
- HTMl 中marquee標籤實現無縫滾動跑馬燈效果HTML
- 直播系統程式碼,Android自定義View實現呼吸燈效果AndroidView
- 直播平臺原始碼,Android自定義View實現呼吸燈效果原始碼AndroidView
- 短視訊原始碼,在Android 中opengl es實現燈光效果原始碼Android
- 結合 CSS3 transition transform 實現簡單的跑馬燈效果CSSS3ORM
- 面試題之純css實現紅綠燈效果(ps:真的很純)面試題CSS
- Swift跑馬燈效果Swift
- CSS3呼吸燈效果CSSS3
- 【STM32+HAL庫】使用通用定時器生成的PWM實現呼吸燈效果定時器
- 純JS實現走馬燈JS
- 實現閃爍燈星星動畫動畫
- 實現聚焦效果
- HTML+CSS完成聚光燈效果HTMLCSS
- zeptojs-跑馬燈效果JS
- 6.5.3 實戰: 用中性色圖層製作燈光效果
- 簡單實現跑馬燈案例
- CSS 數學函式與容器查詢實現不定寬文字溢位跑馬燈效果CSS函式
- 公告欄跑馬燈效果程式碼
- webgl實現故障效果Web
- webgl實現火焰效果Web
- css 實現打分效果CSS
- js實現打字效果JS
- canvas實現波浪效果Canvas
- React實現動畫效果React動畫
- iOS全景效果實現iOS
- Javascript實現動畫效果JavaScript動畫
- 如何實現倒影效果
- ARM學習之GPIO實現流水燈
- 51微控制器實現流水燈
- 營業執照識別介面:透過API實現營業執照識別功能API