實現在ScrollView中拖動控制元件與按圖片比例動態控制佈局大小
以下貼出原始碼
主檔案:
package com.example.test3; import java.io.IOException; import java.io.InputStream; import com.example.test3.MainActivity; import com.example.test3.R; import android.support.v7.app.ActionBarActivity; import android.annotation.SuppressLint; import android.app.ActionBar.LayoutParams; import android.content.ContentResolver; import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; import android.content.SharedPreferences.Editor; import android.database.Cursor; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.Drawable; import android.net.Uri; import android.os.Bundle; import android.provider.MediaStore; import android.util.Log; import android.view.Menu; import android.view.MenuItem; import android.view.MotionEvent; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.RelativeLayout; import android.widget.ScrollView; import android.widget.TextView; import android.widget.Toast; public class MainActivity extends ActionBarActivity { double HW; double screenHeight; double screenWidth; TextView tv1; SharedPreferences sp; final String IMAGE_TYPE = "image/*"; final int IMAGE_CODE = 0; //這裡的IMAGE_CODE是自己任意定義的 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Button addPic=(Button) findViewById(R.id.button1); addPic.setOnClickListener(listener); screenHeight = this.getWindowManager().getDefaultDisplay() .getHeight(); screenWidth = this.getWindowManager().getDefaultDisplay() .getWidth(); //增加可拖動控制元件 tv1 = ( TextView ) findViewById(R.id.textView11); MoveWidget(tv1); } private OnClickListener listener=new OnClickListener(){ @Override public void onClick(View v) { // TODO Auto-generated method stub Button btn=(Button) v; switch(btn.getId()){ case R.id.button1: setImage(); break; } } private void setImage() { // TODO Auto-generated method stub //使用intent呼叫系統提供的相簿功能,使用startActivityForResult是為了獲取使用者選擇的圖片 Intent getAlbum = new Intent(Intent.ACTION_GET_CONTENT); getAlbum.setType(IMAGE_TYPE); startActivityForResult(getAlbum, IMAGE_CODE); }}; @SuppressLint("NewApi") protected void onActivityResult(int requestCode, int resultCode, Intent data){ if (resultCode != RESULT_OK) { //此處的 RESULT_OK 是系統自定義得一個常量 Log.e("TAG->onresult","ActivityResult resultCode error"); return; } Bitmap bm = null; //外界的程式訪問ContentProvider所提供資料 可以通過ContentResolver介面 ContentResolver resolver = getContentResolver(); //此處的用於判斷接收的Activity是不是你想要的那個 if (requestCode == IMAGE_CODE) { try { Uri originalUri = data.getData(); //獲得圖片的uri bm = MediaStore.Images.Media.getBitmap(resolver, originalUri); // 這裡開始的第二部分,獲取圖片的路徑: String[] proj = {MediaStore.Images.Media.DATA}; //好像是android多媒體資料庫的封裝介面,具體的看Android文件 Cursor cursor = managedQuery(originalUri, proj, null, null, null); //按我個人理解 這個是獲得使用者選擇的圖片的索引值 int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA); //將游標移至開頭 ,這個很重要,不小心很容易引起越界 cursor.moveToFirst(); //最後根據索引值獲取圖片路徑 String path = cursor.getString(column_index); //設定各個佈局大小適應手機螢幕 HW=(1f*bm.getHeight())/(1f*bm.getWidth()); LinearLayout.LayoutParams params = new LinearLayout.LayoutParams( (int) (this.screenWidth* 1f + 0.5f), //這裡用寬去乘HW得到的不知道為什麼是錯誤數值,對JAVA浮點運算不了解 (int) (this.screenWidth*HW * 1f + 0.5f)); LinearLayout ll=(LinearLayout)findViewById(R.id.LinearLayout1); ll.setLayoutParams(params); //這裡有BUG,華為機子用setBackground代替setBackgroundDrawable直接掉線 ll.setBackgroundDrawable(Drawable.createFromPath(path));// Toast.makeText(this, ""+bm.getWidth()+bm.getHeight()+HW, Toast.LENGTH_LONG).show(); }catch (IOException e) { Log.e("TAG-->Error",e.toString()); } } } //移動控制元件函式 void MoveWidget(final TextView tv){ sp = getSharedPreferences( "config" , Context.MODE_PRIVATE ); int lastx = sp.getInt( "lastx" , 0 ); int lasty = sp.getInt( "lasty" , 0 ); tv.setOnTouchListener( new View.OnTouchListener(){ int startX; int startY; @Override public boolean onTouch( View v, MotionEvent event ) { MyScrollView sv=(MyScrollView) findViewById(R.id.scrollView1); switch ( event.getAction() ) { case MotionEvent.ACTION_DOWN: sv.requestDisallowInterceptTouchEvent(true); this.startX = ( int ) event.getRawX(); this.startY = ( int ) event.getRawY(); break; case MotionEvent.ACTION_MOVE: sv.requestDisallowInterceptTouchEvent(true); int newX = ( int ) event.getRawX(); int newY = ( int ) event.getRawY(); int dx = newX - this.startX; int dy = newY - this.startY; int l = tv.getLeft(); int r = tv.getRight(); int t = tv.getTop(); int b = tv.getBottom(); int newt = t + dy; int newb = b + dy; int newl = l + dx; int newr = r + dx; if ( ( newl < 0 ) || ( newt < 0 ) || ( newr > screenWidth ) || ( newb > screenHeight ) ) { break; } tv.layout( newl , newt , newr , newb ); this.startX = ( int ) event.getRawX(); this.startY = ( int ) event.getRawY(); break; case MotionEvent.ACTION_UP: int lastx = tv.getLeft(); int lasty = tv.getTop(); Editor editor = sp.edit(); editor.putInt( "lastx" , lastx ); editor.putInt( "lasty" , lasty ); editor.commit(); break; case MotionEvent.ACTION_CANCEL: sv.requestDisallowInterceptTouchEvent(true); } 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); } }
自己重寫的ScrollView(便於之後擴充套件功能):
package com.example.test3; import android.content.Context; import android.util.AttributeSet; import android.view.MotionEvent; import android.widget.ScrollView; //重寫ScrollView方法 public class MyScrollView extends ScrollView{ public MyScrollView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } public MyScrollView(Context context, AttributeSet attrs) { super(context, attrs); } public MyScrollView(Context context) { super(context); } }
最後是XML佈局檔案:
<com.example.test3.MyScrollView xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/scrollView1" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.example.test3.MainActivity" > <LinearLayout android:layout_width="match_parent" android:layout_height="0dp" android:orientation="vertical" > <LinearLayout android:id="@+id/LinearLayout1" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@drawable/personphoto" android:orientation="vertical" > <TextView android:id="@+id/textView11" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="TextView" android:textSize="25dp" /> </LinearLayout> <Button android:id="@+id/button1" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Button" /> <TextView android:id="@+id/TextView01" android:layout_width="fill_parent" android:layout_height="50px" android:gravity="center" android:text="This is textView." > </TextView> </LinearLayout> </com.example.test3.MyScrollView>
相關推薦
實現在ScrollView中拖動控制元件與按圖片比例動態控制佈局大小
以下貼出原始碼 主檔案: package com.example.test3; import java.io.IOException; import java.io.InputStream; import com.example.test3.MainActivity;
QT 中怎樣使得控制元件與 介面等比例變化
轉自:https://github.com/exoticknight/blog-post/blob/master/python-with-Qt-application-development/python%20%C3%97%20Qt%E5%BA%94%E7%94%A8%E5%BC%80%E5%8F%91
半透明視窗中顯示標準控制元件(控制元件與文字不透明)的實現方案(附原始碼)
原文 http://blog.csdn.net/harbinzju/article/details/7907127 和大家分享一下在半透明視窗中顯示標準控制元件的實現方案。通過層疊視窗可以簡單實現半透明與不規則形狀視窗的效果,但在其上顯示標準控制元件(控制元件與文字不
【轉】WPF自定義控制元件與樣式(11)-等待/忙/正在載入狀態-控制元件實現
一.前言 申明:WPF自定義控制元件與樣式是一個系列文章,前後是有些關聯的,但大多是按照由簡到繁的順序逐步釋出的等。 本文主要有三種實現方式: 簡單忙碌狀態控制元件BusyBox; Win8/win10效果忙碌狀態控制元件ProgressRing; 彈出非同步等待框WaitingB
windows中拖動檔案到瀏覽器,實現自動上傳 -- Java
//拖動License檔案到瀏覽器中,自動讀取檔案並上傳var dropbox = $("body")[0];dropbox.addEventListener("dragenter", function(e){ e.stopPropagation(); e.preventDefault();},
Unity中拖動的簡單實現(UGUI以及3D物體)
拖動的基本程式碼如下 [RequireComponent(typeof( RectTransform))] using UnityEngine; using System.Collections; u
MFC製作各種介面,像單文件那樣,可以拖動工具條的介面能放其它控制元件嗎?
我新建一個單文件介面後,不想要那上面的view類,我想在客戶區自己新增一些控制元件上去。怎麼弄呀?? 新建的單文件程式,在資源管理器中只能看到About對話方塊,那個單文件怎麼看不見呢?? 有關於介面程式設計方面的資料
GTK+2.0 中的容器控制元件與佈局技巧
簡介 GTK+(GIMP TOOLKIT),是一個跨平臺的圖形介面(GUI)開發工具,是目前LINUX作業系統中較常用的圖形介面開發工具之一,它採用一種非常有特色的面向物件的C語言開發框架(C Framework),應用它可以輕鬆的在LINUX系統平臺的X WINDOW環境下開發出漂亮的圖形介面應用程式。直
Unity中實現揹包物品拖動和更換位置
using UnityEngine; using System.Collections; using UnityEngine.UI; using UnityEngine.EventSystems; public class PointMoveContro
C#開發PACS醫學影像處理系統(九):序列控制元件與拖拽
1.先看結構: 建立WPF使用者控制元件:YourTab 建立WPF使用者控制元件:YourItem 建立選項卡時迴圈新增item,並設定序列縮圖到控制元件和非同步下載的進度條, 1個病人1個或多個Study檢查,1個Study檢查1個選項卡,併為每個選項卡新增自定義關閉按鈕 &
qt 畫多邊形(實現鼠標拖動節點)
開始 ack set eee del upd tip update lob ---恢復內容開始--- 2018-01-06 這個小例子實現了移動鼠標,鼠標的坐標信息跟隨鼠標移動,多邊形的實現,鼠標點擊可以拖動多邊形點的位置,(其中有個問題?我在QMainWi
正交相機下實現滾輪按鈕拖動,滾動滾輪縮放的功能
pix spa serial ext 分享 內容 onu bject 開始 實現了一個功能,鼠標滾輪鍵按下可以拖動視野內的物體全體(其實是相機自己在移動),滾動滾輪可以縮放內容(其實是改變相機視野大小) 效果如下 代碼奉上 1 using UnityE
C#Form.SplitContainer中清除控制元件textbox值(窗體.容器.控制元件)
文章目錄 問題背景 問題程式碼 問題解決 正確清除程式碼 問題延申 問題背景 早上在完善不確定度計算器時,想要清空實驗資料輸入時所有textbox控制元件值。 問題程式碼
Android中使用ImageView控制元件顯示網路圖片
在android4.0以後的版本中,為了使得主介面流暢,所以設定了不允許在主執行緒中訪問網路,為了安全,又不允許在其它執行緒中訪問控制元件,這樣就造成了ImageView等需要使用網路的控制元件更新時的問題,本文以Handler+Runnable的方式實現了ImageView控制元件顯示網路圖片.
重繪ListCtrl中增加子控制元件Edit是,在父控制元件失去焦點時,子控制元件不進行隱藏
問題:現在有一個listctrl控制元件,需要在某一列上新增一個子控制元件edit。當點選子控制元件(edit)時,子控制元件顯示出來,父控制元件(ListCtrl)已經失去焦點了。此時,要是滑鼠點選的位置不在該控制元件內,edit處於顯示狀態,父控制元件(ListCtrl)是失去焦點狀態。
MFC OnPaint中控制元件繪圖,覆蓋重疊的控制元件
對話方塊上又兩個控制元件,一個static控制元件SS_BITMAP屬性,用來繪圖(canvas),一個static控制元件SS_BITMAP屬性,用來顯示圖片(tool),tool和canvas有重疊部分,為了使canvas在重新整理後不至於消失,我在OnPaint中採用雙緩衝繪圖方式重新整理內容
個人筆記005--原生JS實現簡單的拖動滑塊驗證
早上起來後瀏覽網站時看到別人的拖動滑塊驗證,就想著做一個demo,等到有時間把這個優化到到現在的專案(用的是圖片驗證碼)。以下程式碼就是百度之後再修改一下的: <!DOCTYPE html> <html> <head> <meta charset
PowerBuilder資料視窗控制元件與資料庫有關的函式
本節介紹的主要內容如下: · 與資料庫有關的函式 · 行操作 · 列操作 · 資料操作 PowerBuilder為資料視窗控制元件提供了豐富的函式,這些函式使使用者能夠在使用資料視窗控制元件時得心應手。 與資料庫有關的函式 這類函式完成與資料庫有關的功能。 一、連線資料庫 連線資料庫也就是指定事務物
事件分發 解決header子控制元件與父控制元件的衝突
父控制元件listview佈局 <?xml version="1.0" encoding="utf-8"?> <android.support.constraint.ConstraintLayout xmlns:android="http://schemas.
常用控制元件02(圖片框與進度條)
案例一:訊息提示框 1. Toast(吐絲框) 1.1 Toast是Android中的一種簡易的訊息提示框 1.2 使用這個類的最簡單的方法是呼叫靜態方法構造您所需要的一切,並返回一個新的Toast物件。 Toast toast=To