0

我在相对布局中有一个图像,在图像下方有一个线性布局。这张图片是透明的,所以看起来什么都没有。

我的代码向线性布局添加了 3 个文本视图。

我有它,所以当我在屏幕上移动手指时,它会放大图像的高度,从而给人一种线性布局已经在屏幕上向下移动的印象。

我想得到它,以便在触摸屏幕时,即使取景器静止,图像也会变大,看起来像图像在屏幕上向下移动。当手指移开时,图像停止放大。

我一直在尝试创建一个线程来运行 onTouchEvent 大约 2 周,但我的代码似乎使应用程序崩溃。

有人可以修改我的代码/添加此功能,以便我可以看到哪里出错了。我希望我只是没有将线程放在正确的位置,或者我没有正确停止线程,这导致它崩溃。

我的布局

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:orientation="vertical"
    android:id="@+id/LinearLayout"
    tools:context=".MainActivity" >

    <ImageView
        android:id="@+id/Spacer"
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:contentDescription="Spacer"
        android:src="@drawable/ic_launcher" />

    <LinearLayout 
        android:id="@+id/Letters"
        android:orientation="horizontal"
        android:layout_below="@id/Spacer"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:paddingBottom="@dimen/activity_vertical_margin"
        android:paddingLeft="@dimen/activity_horizontal_margin"
        android:paddingRight="@dimen/activity_horizontal_margin"
        android:paddingTop="@dimen/activity_vertical_margin" >

    </LinearLayout>

</RelativeLayout>

我的活动

package com.example.zz;

import android.app.Activity;
import android.os.Bundle;
import android.view.Gravity;
import android.view.Menu;
import android.view.MotionEvent;
import android.view.View;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.LinearLayout.LayoutParams;
import android.widget.RelativeLayout;
import android.widget.TextView;

public class MainActivity extends Activity {

    protected int splashTime = 3000;

    TextView tv1;
    ImageView spacer;
    String[] name = {"Hello","Rich","You","Hero"};

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        String[] letters = {"A","B","C"};
        String letter = "";
        String nextLetters = "";

        for( int i = 0; i < letters.length; i++)
        {
            letter = letters[i];
            nextLetters = nextLetters + letter;

            // Create a textView in code
            LayoutParams paramsExample = new LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT,1);
            View linearLayout =  findViewById(R.id.Letters);
            TextView tv1 = new TextView(this); 
            tv1.setText(letter); 
            tv1.setLayoutParams(paramsExample);
            tv1.setGravity(Gravity.CENTER);
            ((LinearLayout) linearLayout).addView(tv1);
        } 
    }


    @Override
    public boolean onTouchEvent(MotionEvent e) {

        switch (e.getAction()) {
            case MotionEvent.ACTION_MOVE:
                spacer = (ImageView) findViewById(R.id.Spacer);

                RelativeLayout.LayoutParams head_params = (RelativeLayout.LayoutParams)spacer.getLayoutParams();
                head_params.height = 400;
                spacer.setLayoutParams(head_params);

        }
        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;
    }
}

我只是使用启动图标作为图像。

任何帮助都会减轻我的脱发,在此先感谢。

4

1 回答 1

1

您可以设置一个错误的布尔值。如果 ACTION_MOVE 被调用,则将其设置为 true,而当 ACTION_UP 被调用时,您再次将其设置为 false。

然后,您使用处理程序每​​ x 毫秒调用一次运行

实现可运行并分配处理程序

    private Handler handler = new Handler();

在创建时:

    handler.postDelayed(this,TIME);

然后调用运行:

    @Override
    public void run(){
         if (yourboolean == true){
              spacer = (ImageView) findViewById(R.id.Spacer);

              RelativeLayout.LayoutParams head_params = (RelativeLayout.LayoutParams)spacer.getLayoutParams();
              head_params.height += 100;
              spacer.setLayoutParams(head_params);   

         }

         handler.postDelayed(this,TIME);
    }
于 2013-09-05T17:16:10.610 回答