English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
この記事では、Androidプログラミングで画像の一部のみを表示する方法について説明しています。以下に詳しく説明します。
Androidアプリケーションで画像をロードし、それを表示するのは非常に簡単なことですが、画像の一部を表示する方法はどうすればいいのでしょうか。一つの方法は、表示したい部分をパス処理して、それを別の画像として保存し、プログラムでそれを読み込んで表示することです。しかし、これによりプログラムの画像量が増加します。完全な画像に対して、プログラムで必要な部分を切り取ることは非常に簡単です。
以下に実装されたプログラムは、画像をロードし、それを変換してスマートフォンの全体のスクリーンにフィルルすると、スクリーンの中央に画像の中央部分を表示する。100*100の部分。
ShowPoritionPictureActivityコード:
package com.iwin.zzs; import android.app.Activity; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Matrix; import android.os.Bundle; import android.util.DisplayMetrics; import android.view.WindowManager; public class ShowPoritionPictureActivity extends Activity { /** アクティビティが最初に作成されたときに呼び出されます。 */ Bitmap picRes; Bitmap showPic; //元画像の幅と高さを取得します int picWidth; int picHeight; private PoritionView poritonView = null; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); // ステータスバーを表示しない this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); DisplayMetrics dm = new DisplayMetrics(); this.getWindowManager().getDefaultDisplay().getMetrics(dm); // スクリーンの長さと幅を取得します int screenWidth = dm.widthPixels; //水平解像度 int screenHeight = dm.heightPixels; //垂直解像度 picRes = BitmapFactory.decodeResource(this.getResources(), R.drawable.girl); // 画像の長さと幅を取得します picWidth = picRes.getWidth(); picHeight = picRes.getHeight(); // 拡大率を計算します、新しいサイズを元のサイズで割る float scaleWidth = ((float) screenWidth ) / picWidth; float scaleHeight = ((float) screenHeight ) / picHeight; // 创建操作图片用的matrix对象 Matrix matrix = new Matrix(); // 缩放图片动作 matrix.postScale(scaleWidth, scaleHeight); // 新得到的图片是原图片经过变换填充到整个屏幕的图片 Bitmap picNewRes = Bitmap.createBitmap(picRes, 0, 0,picWidth, picHeight, matrix, true); // bitmap = Bitmap.createBitmap(400, 480, Bitmap.Config.ARGB_8888); // canvas=new Canvas(); // canvas.setBitmap(bitmap); showPic = Bitmap.createBitmap(picNewRes, screenWidth/2-50, screenHeight/2-50, 100, 100); poritonView = new PoritionView(this); poritonView.setBitmapShow(showPic, screenWidth/2-50, screenHeight/2-50); setContentView(poritonView); }
新建PoritionView类代码:
package com.iwin.zzs; import android.content.Context; import android.graphics.Bitmap; import android.graphics.Canvas; import android.view.View; public class PoritionView extends View { private Bitmap showPic = null; private int startX = 0; private int startY = 0; public PoritionView(Context context) { super(context); // TODO 自动-生成构造函数存根 } @Override protected void onDraw(Canvas canvas) { // TODO 自动-生成方法存根 super.onDraw(canvas); canvas.drawBitmap(showPic, startX, startY, null); } public void setBitmapShow(Bitmap b, int x, int y) { showPic = b; startX = x; startY = y; } }
プロジェクトres/drawableにgir.png画像を追加し、プログラムを実行すると、画像の中央のみが表示されます。100*100の部分の画像。
Androidに関する詳細な内容に興味がある読者は、当サイトの特集を確認してください:《Androidグラフィックスと画像処理技術の要約》、《Android開発入門と進階チュートリアル》、《Androidデバッグ技術と一般的な問題解決方法の集約》、《Androidマルチメディア操作技術の集約(オーディオ、ビデオ、録音など)》、《Android基本コンポーネントの使用方法の要約》、《AndroidビューViewの技術の要約》、《Androidレイアウトlayoutの技術の要約》および《Androidコントロールの使用方法の要約》
本文の内容が皆様のAndroidプログラム設計に役立つことを願っています。
声明:本文の内容はインターネットから収集され、著作権者に帰属します。インターネットユーザーが自発的に貢献し、アップロードした内容であり、当サイトは所有権を持ちません。また、人工的な編集は行われておらず、関連する法的責任も負いません。著作権侵害を疑われる内容があれば、メールを送信してください:notice#oldtoolbag.com(メール送信時、#を@に変更してください。報告を行い、関連する証拠を提供してください。一旦確認がとりたいと、当サイトは即座に侵害を疑われるコンテンツを削除します。)